// 函数库

// ajax封装
function ajax(options){
    return new Promise((resolve,reject)=>{
        // 解构赋值
        let {method,url,data,success,error,timeout=0,cached=true,dataType='text'} = options;

        // 创建数据交互对象xhr
        let xhr = new XMLHttpRequest();

        // 设置超时
        xhr.timeout = timeout;

        let str = '';

        // 判断data的数据类型
        if (Object.prototype.toString.call(data) === '[object Object]') {
            // 将data转成查询字符串
            for (let key in data){
                str += `${key}=${data[key]}&`;
            }
            // console.log( str );// 'username=xiaocuo&password=123123&'
            data = str.substr(0,str.length-1);
            // console.log( data );// 'username=xiaocuo&password=123123'
        }
        else if (Object.prototype.toString.call(data) !== '[object String]'){
            throw new TypeError('data只能是查询字符串或对象类型！');
        }

        // 判断请求方式
        if (method.toLowerCase() === 'get') {
            if (cached) {
                // 初始化请求
                xhr.open(method,url+'?'+data,true);
            } else {
                // 初始化请求
                xhr.open(method,url+'?'+data+'&_='+Date.now(),true);
            }
            // 将请求发送到服务端
            xhr.send(null);
        }
        else if (method.toLowerCase() === 'post'){
            // 初始化请求
            xhr.open(method,url,true);

            // 设置请求头信息
            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

            // 将请求发送到服务端
            xhr.send(data);
        }
        else{
            throw new TypeError('目前仅支持get和post请求！');
        }
        
        // 监听状态改变事件
        xhr.onreadystatechange = function (){
            if (xhr.readyState === 4) {// 请求完成
                if (xhr.status >= 200 && xhr.status < 300) {// 响应成功
                    // 根据dataType数据类型返回对应的数据
                    if (dataType === 'json') {
                        // 将JSON字符串转成JSON对象
                        let result = JSON.parse(xhr.responseText);
                        // success(result);
                        resolve(result);
                    }
                    else if (dataType === 'xml'){
                        // success(xhr.responseXML);
                        resolve(xhr.responseXML);
                    }
                    else{
                        // success(xhr.responseText);
                        resolve(xhr.responseText);
                    }
                } else {
                    // console.log( '失败',xhr.status );
                    // error(xhr.status);
                    reject(xhr.status);
                }
            }
        }

        // 将xhr对象挂在ajax函数上
        ajax.xhr = xhr;

    });
}

// 设置cookie
function setCookie(options){
    // 解构赋值
    let {key,val,domain='',path='',exp=''} = options;
    // 判断是否设置有效期
    let d;
    if (exp) {
        d = new Date();
        d.setMinutes(d.getMinutes()+exp);
    } else {
        d = '';
    }
    document.cookie = `${key}=${val}; domain=${domain}; path=${path}; expires=${d}`;
}

// 获取cookie
function getCookie(key){
    let arr = document.cookie.split('; ');
    // ['user1=xiaohong', 'user3=xiaodong', 'user5=xiaowang']
    let data = null;
    arr.forEach((item)=>{
        let arr = item.split('=');// ['user1','xiaohong']
        if (arr[0] === key) {
            data = arr[1];
        }
    })
    return data;
}

// 删除cookie
function removeCookie(key){
    // cookie过期浏览器会自动删除
    setCookie({
        key: key,
        val: '123',
        exp: -60*24
    });
}
